package main

import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

const (
	MAXBUFFERSIZE = 4096 //默认缓冲区
	FILENAME      = "C:\\Users\\junma\\Desktop\\goland-study\\go_code\\basis\\chapter09-file\\工作计划.txt"
)

func main() {
	//打开文件
	file, err := os.Open(FILENAME)
	if err != nil {
		fmt.Println("读取文件失败n")
	}
	if file != nil {
		defer file.Close()
	}

	//文件,缓冲读取
	BufReaderAndShow(file)
	//文件，一次性读取
	//适合小文件，如果文件比较大，则性能较低
	fileIOUtils(FILENAME)
}

//缓冲式读取文件
func BufReaderAndShow(file *os.File) {
	//关闭文件
	if file != nil {
		defer file.Close()
	}

	//读取文件操作
	reader := bufio.NewReader(file)
	for {
		readerStr, err := reader.ReadString('\n') //以什么字符结尾
		if err == io.EOF {                        //io.EOF：表示已经到文件的结尾
			fmt.Println("已经到文件结尾。。。", err)
			break
		}
		fmt.Println(readerStr)
	}
}

//一次性读取文件
func fileIOUtils(file string) {
	str, err := ioutil.ReadFile(file)
	//因为没有明确的显示的open，所以也不需要显示的close
	if err != nil {
		fmt.Println("ioutils读取失败")
	}
	fmt.Println(string(str))
}
